dynamics_joints Module

Provides types and routines describing the kinematic joints that connect the links of a mechanism.



Contents


Variables

Type Visibility Attributes Name Initial
integer(kind=int32), public, parameter :: CYLINDRICAL_JOINT = 3

Defines a joint permitting rotation about, and translation along, the joint's z-axis.

integer(kind=int32), public, parameter :: FIXED_JOINT = 2

Defines a rigid connection permitting no relative motion.

integer(kind=int32), public, parameter :: SPHERICAL_JOINT = 5

Defines a joint permitting rotation about all three axes. The rotation is parameterized by a z-y-x Euler angle sequence.

integer(kind=int32), public, parameter :: UNIVERSAL_JOINT = 4

Defines a joint permitting rotation about the joint's x-axis followed by rotation about the resulting y-axis.


Interfaces

public interface joint

  • private function jnt_init(jtype, parent_link, child_link, parent_frame, child_frame, actuated) result(rst)

    Initializes a new joint object.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: jtype

    The type of joint. This value must be one of FIXED_JOINT, REVOLUTE_JOINT, PRISMATIC_JOINT, CYLINDRICAL_JOINT, UNIVERSAL_JOINT, or SPHERICAL_JOINT.

    integer(kind=int32), intent(in) :: parent_link

    The index of the parent link.

    integer(kind=int32), intent(in) :: child_link

    The index of the child link.

    integer(kind=int32), intent(in), optional :: parent_frame

    The index of the coordinate frame on the parent link to which the joint attaches. If not supplied, a value of one is used.

    integer(kind=int32), intent(in), optional :: child_frame

    The index of the coordinate frame on the child link to which the joint attaches. If not supplied, a value of one is used.

    logical, intent(in), optional :: actuated

    True if the joint is driven. If not supplied, the joint is considered passive.

    Return Value type(joint)

    The resulting joint object.


Derived Types

type, public ::  joint

Defines a kinematic joint connecting two links. The joint attaches to a coordinate frame on each of the two links; the frames are identified by their index within each link. The joint is coincident with both frames when all of its joint variables are zero.

Components

Type Visibility Attributes Name Initial
logical, public :: actuated = .false.

True if the joint is driven; else, false for a passive joint.

integer(kind=int32), public :: child_frame = 1

The index of the coordinate frame on the child link to which the joint attaches.

integer(kind=int32), public :: child_link = 0

The index of the child link.

integer(kind=int32), public :: joint_type = REVOLUTE_JOINT

The type of joint. This value must be one of FIXED_JOINT, REVOLUTE_JOINT, PRISMATIC_JOINT, CYLINDRICAL_JOINT, UNIVERSAL_JOINT, or SPHERICAL_JOINT.

integer(kind=int32), public :: parent_frame = 1

The index of the coordinate frame on the parent link to which the joint attaches.

integer(kind=int32), public :: parent_link = 0

The index of the parent link.

Constructor

private function jnt_init (jtype, parent_link, child_link, parent_frame, child_frame, actuated)

Initializes a new joint object.

Type-Bound Procedures

procedure , public :: get_constraint_count => jnt_get_constraint_count Function
procedure , public :: get_dof => jnt_get_dof Function
procedure , public :: get_planar_constraint_count => jnt_get_planar_count Function
procedure , public :: is_planar_compatible => jnt_is_planar Function
procedure , public :: motion_transform => jnt_motion_transform Function

Functions

public pure function joint_degrees_of_freedom(jtype) result(rst)

Gets the number of degrees of freedom permitted by the requested joint type.

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: jtype

The joint type.

Return Value integer(kind=int32)

The number of degrees of freedom. A value of -1 is returned if the joint type is not recognized.